package com.ehome.poct.core.service;

import com.ehome.poct.base.api.dto.device.TestDeviceDTO;
import com.ehome.poct.base.api.dto.doctor.ClinicDTO;
import com.ehome.poct.core.api.dto.check.AlgoRequestLog;
import com.ehome.poct.core.api.dto.check.CheckDataDTO;
import com.ehome.poct.core.api.dto.check.CheckParamDTO;
import com.ehome.poct.core.api.dto.check.SampleMaterialDTO;

/**
 * 检测服务 抽象
 * 所有检测都需要实现这些接口
 *
 * @author cq
 * @since 2022/03/02 13:30
 **/
public interface AbstractCheckService {
    /**
     * 【检测流程】（一）
     * 检验设备信息 设备是否存在，设备状态是否禁止使用
     * @param sno 设备编号
     * @param deviceType 设备类型
     * @return TestDeviceDTO 检测设备
     */
    void handleDeviceInfo(String sno, Integer deviceType,TestDeviceDTO device);

    /**
     * 【检测流程】（二）
     * 校验诊所信息
     * @param device 设备
     * @param clinicId 诊所ID
     * @return 诊所信息
     */
    void handleClinicInfo(TestDeviceDTO device, Long clinicId, ClinicDTO clinic);

    /**
     * 处理耗材信息 （三）
     * 状态变更 或者加工处理 或者检验板子信息
     * @param paramDTO 检测参数
     *
     */
    SampleMaterialDTO handleSamplematerial(CheckParamDTO paramDTO);
    /**
     * 【检测流程】（四）
     * 调用算法的远程服务 进行计算
     * 算法返回的不确定，用String收，
     */
    AlgoRequestLog algoProcess(CheckParamDTO paramDto,SampleMaterialDTO board);

    /**
     * 【检测流程】（五）
     * 预处理算法处理的数据
     * eg:金标仪 要算法识别 条形码 然后判断是不是公司支持的条码
     * 或者后续 金标仪4。0 之后，卡盒有二维码，也需要算法先处理
     *
     * @param algoData
     * @param device 设备信息
     * @param clinic 诊所
     * @param material 耗材
     */
    CheckDataDTO handleAlgoData(CheckParamDTO param, String algoData, TestDeviceDTO device, ClinicDTO clinic, SampleMaterialDTO material, AlgoRequestLog algoLog);
}
